// 定义正则表达式
const REGS = {
  // 身份证号
  idno: /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/,
  // 金额 0.00
  money: {
    express: /(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)/,
    msg: '金额格式错误，0.00'
  },
  // 正整数+0
  intzero: {
    express: /^[+]{0,1}(\d+)$/,
    msg: '数格式错误（大于等于0的整数）'
  },
  // 天数 大于等于0整数
  day: {
    express: /^[+]{0,1}(\d+)$/,
    msg: '天数格式错误（大于等于0的整数）'
  },
  // 小时 大于等于0，小于24整数
  hour: {
    express: /^(\d|1\d|2[0-3])$/,
    msg: '小时格式错误（大于等于0，小于24的整数）'
  },
  // 分钟 大于等于0，小于60整数
  minute: {
    express: /^(\d|1\d|5[0-9])$/,
    msg: '分钟格式错误（大于等于0，小于60的整数）'
  },
  // 年份
  yyyy: {
    express: /[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}/
  }
}

// 返回正则表达式
export function getRegs () {
  return REGS
}

// 1:身份证分类:18位身份证和15位身份证
// 2. 正则校验
// /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/
// 3.组成
//   顺序码的奇偶来表示男女
//   ① 18位身份证中
//   6位地址码,8位出生日期,3位数字顺序码,1位数字校验码
//   ②15位身份证中
//   6位地址码,6位出生日期(其中7位和8位表示年,比如1959对应59),3位数字顺序码
export function regIdCard (idno) {
  let birthday = ''
  let sex = 0
  // 先判断是否规范
  if (regPassed(REGS.idno, idno)) {
    if (idno.length === 15) {
      birthday = `19${idno.substring(6, 8)}-${idno.substring(9, 10)}-${idno.substring(11, 12)}`
      sex = (idno[14] % 2 === 0) ? '女' : '男'
    } else {
      birthday = `${idno.substring(6, 10)}-${idno.substring(10, 12)}-${idno.substring(12, 14)}`
      sex = (idno[16] % 2 === 0) ? '女' : '男'
    }
  }
  return {
    idno,
    birthday,
    sex
  }
}

// 验证规则
export function regPassed (regExp, value) {
  if (value) {
    const reg = new RegExp(regExp)
    return reg.test(value)
  }
  return true
}
